/* eslint-disable consistent-return */
/************************************************************************************************
 *   深圳市摩西尔电子有限公司 @版本所有@
 *
 *   此文件用于ui页面测试
 * 修改:
 *   1. 类型 : 创建
 *      作者 : 徐烁超
 *      时间 : 2020.10.31
 *      内容 : 所有代码
 *************************************************************************************************/
/* exported test_case_test_case_ui */
/* exported mc_case_1 */
/* exported mc_case_2 */
/* exported mc_case_3 */
/* exported mc_case_4 */

/* global $ */
/* global hint */
/* global g_obj_ui_jump_time */
/* global mc_sdk_param */

/* global mc_sdk_get_dicpchip_info_msg */
/* global md5 */
/* global mc_crypto_set_box_md5_to_key */

var g_str_error = "Error";
var g_str_serve_port = "http://localhost:8000";
var g_ui_error_carry_cnt = 1;
// 获取指定的几个window
var g_obj_test_iform_dom = $("#test_window").children();
// 指定等待时间
var g_obj_load_time = {
    // 等待页面挂载window.onerror事件
    mount_onerror: 150,
    mc_updata_param: 100
};
// 执行日志
var g_obj_log_list = {};
// 当前执行测试函数
var g_str_test_case_name = "";
// 步进框最大值
var g_ui_step_max_val = 0xffffffff;
// 设置测试pin值当前第几次
var ui_test_pin_times = 1;

function test_case_test_case_ui(this_td, str_fn_name, fn_callback) {
    g_str_test_case_name = str_fn_name;
    g_ui_error_carry_cnt = 1;
    ui_test_pin_times = 1;
    var test_fn = eval("(false || " + str_fn_name + ")");
    var result_td = this_td;

    test_fn(mc_case_callback);
    function mc_case_callback(str_error) {
    // 用于test3测试
        if ("test_3_next" === str_error) {
            g_obj_test_iform_dom = $("#test_window").children();
            console.log(ui_test_pin_times);

            if (3 >= ui_test_pin_times) {
                test_fn(mc_case_callback);
                mc_log_error(44, true, "test_3");
            }
            if (4 === ui_test_pin_times) {
                hint(true, result_td);
                if ("function" === typeof fn_callback) {
                    fn_callback();
                }
            }
            return;
        }
        if ("0" !== str_error) {
            if (5 > g_ui_error_carry_cnt) {
                ui_test_pin_times = 1;
                g_ui_error_carry_cnt++;

                test_fn(mc_case_callback);
                return;
            }
            hint(false, result_td, g_str_error);
            if ("function" === typeof fn_callback) {
                fn_callback();
            }
        } else {
            hint(true, result_td);
            if ("function" === typeof fn_callback) {
                fn_callback();
            }
        }
    }
}
/**
 * 测试用例1:
 * 测试内容:
 * 进入页面-点击模组向导按钮-
 * @param {Function} fn_callback 回调函数(返回错误内容 , 0代表执行正常)
 */
function mc_case_1(fn_callback) {
    var obj_index_window = -1;
    var obj_main_window = -1;
    var obj_use_iform_tag = -1;
    var obj_use_window = -1;
    var obj_alert_ifram_window = -1;
    var obj_alert_ifram_window_1 = -1;

    // 进入index.html页面
    mc_updata_ui(mc_index_html);

    function mc_index_html() {
        obj_index_window = g_obj_test_iform_dom[0].contentWindow;
        obj_main_window = obj_index_window.$("#iframe_subpage")[0].contentWindow;
        obj_use_iform_tag = obj_main_window.$("#iframe_content_subpage")[0];
        obj_use_window = obj_use_iform_tag.contentWindow;

        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 6)) {
            fn_callback("1");
            mc_log_error(0, 0);
            return;
        }

        mc_watch_window_error([obj_index_window, obj_main_window, obj_use_window], g_obj_test_iform_dom);

        // 点击模组向导按钮
        obj_use_window.$("#btn_id_mod_wizard").click();

        mc_util_lodading(mc_case_go_mod_ui, g_obj_ui_jump_time.mod_wizard);
    }

    // 模组向导按钮
    function mc_case_go_mod_ui() {
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 2)) {
            fn_callback("1");
            mc_log_error(1, 0);
            return;
        }
        var obj_chiplist_type = obj_use_window.$("#mc_item_grp_chiplist_type");

        obj_chiplist_type
        // 点击主控芯片下拉框
            .children().eq(0).children().children().children().children().eq(0).click()
        // 点击mini芯片
            .next().children().eq(1).click();
        // 切换芯片将试算模组,故需要试算时间
        mc_util_lodading(mc_update_ctrl, g_obj_ui_jump_time.try_calculate);
    }
    function mc_update_ctrl() {
        var obj_chiplist_type = obj_use_window.$("#mc_item_grp_chiplist_type");

        obj_chiplist_type.nextAll().eq(0)
        // 点击宽控件下左箭头
            .children().children().children().children().eq(2).children().children().children().children().eq(0).click();

        obj_chiplist_type.nextAll().eq(3)
        // 移入颜色1黑色
            .children(".mc_fold_content").children().children().children().eq(0).children().eq(1).children().children().children().eq(3).mouseover()
        // 按下颜色1黑色
            .mousedown();
        // 点击放电低有效空间,需要试算
        obj_chiplist_type.nextAll().eq(0)
            .children().children().children().children().eq(6).children(".mc_edt_inp_wrap").children().children().click();
        mc_util_lodading(mc_update_colse_low, g_obj_ui_jump_time.try_calculate);
    }

    function mc_update_colse_low() {
        var obj_chiplist_type = obj_use_window.$("#mc_item_grp_chiplist_type");

        obj_chiplist_type.nextAll().eq(3)
        // 点击颜色1上的测试按钮
            .children(".mc_fold_content").children().children().children().eq(0).children().eq(3).click();

        mc_util_lodading(mc_mod_clr1_test, g_obj_ui_jump_time.mc_alert);
    }
    // 点击模组测试按钮
    function mc_mod_clr1_test() {
    // 定位提示框
        var obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            mc_util_lodading(mc_clr1_test_end, g_obj_ui_jump_time.mod_test);
            return;
        }
        // 提示框确认
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        mc_clr1_test_end();
    }
    function mc_clr1_test_end() {
    // 模组向导页面应用按钮
        obj_use_window.$(".icon-btn-apply").click();
        mc_util_lodading(mc_on_clk_apply, g_obj_ui_jump_time.mc_alert);
    }
    // 模组页面应用按钮
    function mc_on_clk_apply() {
    // 定位提示框
        var obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 提示框确认
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        mc_util_lodading(mc_use_mod, g_obj_ui_jump_time.box_main);
    }

    // 提示框确认按钮
    function mc_use_mod() {
    // 跳转路径是否正确
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 0)) {
            fn_callback("url");
            return;
        }
        // 点击寄存器按钮
        obj_use_window.$(".icon-params").click();
        // 定位弹出层
        var obj_alert_$ = obj_main_window.$(".layui-layer-iframe").eq(0);

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 定位reg页面window
        obj_alert_ifram_window = obj_alert_$.children(".layui-layer-content").children().eq(0)[0];
        if (!mc_url_is_expect_url(obj_alert_ifram_window.src, 3)) {
            fn_callback("url");
            return;
        }
        obj_alert_ifram_window = obj_alert_ifram_window.contentWindow;
        mc_watch_window_error([obj_alert_ifram_window]);
        mc_util_lodading(mc_clk_reg_cfg, g_obj_ui_jump_time.reg_cfg);
    }

    // 寄存器按钮
    function mc_clk_reg_cfg() {
        if (!mc_url_is_expect_url(obj_alert_ifram_window.location.href, 3)) {
            fn_callback("url");
            return;
        }
        // 点击reg页面发送
        obj_alert_ifram_window.$(".icon-hardware-write").click();
        // 定位弹出层
        var obj_alert_$ = obj_main_window.$(".layui-layer-iframe").eq(1);

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 定位load页面window
        obj_alert_ifram_window_1 = obj_alert_$.children(".layui-layer-content").children().eq(0)[0];

        if (!mc_url_is_expect_url(obj_alert_ifram_window_1.src, 4)) {
            fn_callback("url");
            return;
        }
        obj_alert_ifram_window_1 = obj_alert_ifram_window_1.contentWindow;
        mc_watch_window_error([obj_alert_ifram_window_1]);
        mc_util_lodading(mc_clk_reg_send_btn, g_obj_ui_jump_time.load_data);
    }

    // 进入load页面(寄存器)
    function mc_clk_reg_send_btn() {
        if (!mc_url_is_expect_url(obj_alert_ifram_window_1.location.href, 4)) {
            fn_callback("url");
            return;
        }
        // load页面发送
        obj_alert_ifram_window_1.$(".icon-hardware-write").click();
        mc_util_lodading(mc_send_reg, g_obj_ui_jump_time.load_btn);
    }

    // load页面发送按钮(寄存器)
    function mc_send_reg() {
    // 定位提示框
        var obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 点击提示页面确定
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        // 关闭发送页面
        obj_main_window.$(".layui-layer-iframe").eq(1).children(".layui-layer-setwin").children().click();
        // 点击页面应用
        obj_alert_ifram_window.$(".icon-btn-apply").click();
        // 定位提示框
        obj_alert_$ = obj_main_window.$(".layui-layer-dialog").eq(1);

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 点击应用
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        mc_util_lodading(mc_use_reg, g_obj_ui_jump_time.mc_alert);
    }

    // 寄存器页面应用
    function mc_use_reg() {
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 0)) {
            fn_callback("url");
            return;
        }
        // 进入箱体链接页面
        obj_use_window.$(".icon-box-connect").click();
        mc_util_lodading(mc_clk_box_layout_btn, g_obj_ui_jump_time.height_lever_layout);
    }

    // 点击箱体链接按钮
    function mc_clk_box_layout_btn() {
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 1)) {
            fn_callback("url");
            return;
        }
        // 箱体链接发送
        obj_use_window.$(".icon-hardware-write").click();
        // 定位弹出层;
        var obj_alert_$ = obj_main_window.$(".layui-layer-iframe");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 定位Load页面window
        obj_alert_ifram_window = obj_alert_$.children(".layui-layer-content").children().eq(0)[0].contentWindow;
        mc_watch_window_error([obj_alert_ifram_window]);
        mc_util_lodading(mc_clk_box_send, g_obj_ui_jump_time.load_data);
    }

    // 点击箱体链接页面发送按钮
    function mc_clk_box_send() {
        if (!mc_url_is_expect_url(obj_alert_ifram_window.location.href, 4)) {
            fn_callback("url");
            return;
        }
        obj_alert_ifram_window.$(".icon-hardware-write").click();

        mc_util_lodading(mc_send_box, g_obj_ui_jump_time.load_btn);
    }

    // 进入load页面(箱体链接)
    function mc_send_box() {
    // 定位提示框
        var obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 点击提示页面确定
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        // 关闭发送页面
        obj_main_window.$(".layui-layer-iframe").eq(0).children(".layui-layer-setwin").children().click();
        // 点击页面应用
        obj_use_window.on_clk_apply();
        // 定位提示框
        obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 点击应用
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        mc_util_lodading(mc_clk_use_box, g_obj_ui_jump_time.box_main);
    }

    // load页面发送(箱体链接)
    function mc_clk_use_box() {
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 0)) {
            fn_callback("url");
            return;
        }
        // 大屏连接
        obj_main_window.$("#mc_side_head_btn").click();
        // 左侧悬浮框添加
        obj_main_window.$("#load_file").next().click();

        mc_util_lodading(mc_side_head_add_btn, g_obj_ui_jump_time.height_lever_layout);
    }

    // 右侧悬浮宽大屏连接添加按钮
    function mc_side_head_add_btn() {
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 1)) {
            fn_callback("url");
            return;
        }
        // 点击快速布局
        obj_use_window.$(".icon-box-quick-layout").click();
        mc_util_lodading(mc_clk_quick_layout, g_obj_ui_jump_time.check_mod);
    }

    // height_layout页面快速布局
    function mc_clk_quick_layout() {
    // 定位弹出层;
        var obj_alert_$ = obj_main_window.$(".layui-layer-iframe");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 定位check_mod页面window
        obj_alert_ifram_window = obj_alert_$.children(".layui-layer-content").children().eq(0)[0].contentWindow;
        mc_watch_window_error([obj_alert_ifram_window]);
        if (!mc_url_is_expect_url(obj_alert_ifram_window.location.href, 5)) {
            fn_callback("url");
            return;
        }
        // 点击第一个箱体
        obj_alert_ifram_window.$("#mc_contain").children().eq(0).click();
        // 点击应用
        obj_alert_ifram_window.$(".icon-btn-apply").click();
        // 定位弹出层;
        obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        // 点击确定
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        // 点击快速布局应用
        obj_use_window.$("#mc_hlever_layout_btn_pop_menu .btn_outside_box .btn_wrap btn_use").click();
        // 点击快速连线
        obj_use_window.$("#mc_quick_connect .icon-gamma").click();
        // 点击快速连线中的第一个中方法
        obj_use_window.$("#mc_quick_connect_img #horz_even").click();
        // 点击应用
        obj_use_window.$(".icon-btn-apply").click();
        mc_util_lodading(mc_height_layout_apply, g_obj_ui_jump_time.mc_alert);
    }

    // 进入check_mod页面(快速布局)
    function mc_height_layout_apply() {
    // 定位弹出层;
        var obj_alert_$ = obj_main_window.$(".layui-layer-dialog");

        if (0 >= obj_alert_$.length) {
            fn_callback("alert");
            return;
        }
        obj_alert_$.children(".layui-layer-btn-").children(".layui-layer-btn0").click();
        // obj_use_iform_tag.
        mc_fn_state_normal(fn_callback);
    }
}

/**
 * 测试用例2:
 * @param {Function} fn_callback 回调函数(返回错误内容 , 0代表执行正常)
 */
function mc_case_2(fn_callback) {
    var obj_index_window = -1;
    var obj_main_window = -1;
    var obj_use_iform_tag = -1;
    var obj_use_window = -1;

    mc_updata_ui(mc_index_html);
    // 进入index.html页面
    function mc_index_html() {
        obj_index_window = g_obj_test_iform_dom[0].contentWindow;
        obj_main_window = obj_index_window.$("#iframe_subpage")[0].contentWindow;
        obj_use_iform_tag = obj_main_window.$("#iframe_content_subpage")[0];
        obj_use_window = obj_use_iform_tag.contentWindow;

        // 检测路径是否正常
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 6)) {
            mc_log_error(4, false);
            fn_callback("1");
            return;
        }
        // 检测渲染

        // 执行正常
        mc_log_error(4, true);
        // 页面操作
        mc_watch_window_error([obj_index_window, obj_main_window, obj_use_window]);
        mc_util_lodading(loading_mount_onerror, g_obj_load_time.mount_onerror);
    }

    // 等待window载入onerror事件
    function loading_mount_onerror() {
        obj_use_window.$("#btn_id_mod_wizard").click();
        mc_util_lodading(box_index_mod_wizard_btn, g_obj_ui_jump_time.mod_wizard);
    }

    // 点击模组向导按钮
    function box_index_mod_wizard_btn() {
    // 检测路径是否正常
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 2)) {
            mc_log_error(0, false);
            fn_callback("1");
            return;
        }
        // 检测渲染

        // 主控,hub芯片控件列表
        var obj_chip_dom = obj_use_window.$("#mc_item_grp_chiplist_type");

        // 主控芯片
        var obj_ctrl_list_dom = obj_chip_dom.children().eq(0);
        // hub芯片
        var obj_hub_list_dom = obj_chip_dom.children().eq(1);

        // 电气控件列表
        var obj_eeectric_dom = obj_chip_dom.next().children(".mc_fold_content").children().children().children();
        // 显示芯片
        var obj_disp_list_dom = obj_eeectric_dom.eq(0);
        // 行管芯片
        var obj_scan_list_dom = obj_eeectric_dom.eq(1);
        // 宽
        var obj_width_dom = obj_eeectric_dom.eq(2);
        // 高
        var obj_height_dom = obj_eeectric_dom.eq(3);
        // 数据组数
        var obj_grp_cnt_dom = obj_eeectric_dom.eq(4);
        // 数据组类型
        var obj_grp_mod_dom = obj_eeectric_dom.eq(5);
        // 放电低有效
        var obj_close_low_dom = obj_eeectric_dom.eq(6);
        // 第二路时钟
        var obj_slck2_dom = obj_eeectric_dom.eq(7);

        // 行扫数控件列表
        var obj_scan_dom = obj_chip_dom.nextAll().eq(2).children(".mc_fold_content").children().children().children();
        // 行扫数
        var obj_scan_num_dom = obj_scan_dom.eq(0);
        // 测试行
        var obj_test_line_dom = obj_scan_dom.eq(1);

        // 灯串颜色控件列表
        var obj_led_clr_dom = obj_chip_dom.nextAll().eq(3).children(".mc_fold_content").children().children().children();
        // 颜色1
        var obj_clr_1_dom = obj_led_clr_dom.eq(0);
        // 颜色2
        var obj_clr_2_dom = obj_led_clr_dom.eq(1);
        // 颜色3
        var obj_clr_3_dom = obj_led_clr_dom.eq(2);

        // 检测主控芯片列表渲染
        mc_test_chip_list(5, "", "FPGA", obj_ctrl_list_dom, function (str_ctrl_error) {
            if ("1" === str_ctrl_error) {
                fn_callback("1");
                return;
            }
            // 检测hub芯片列表渲染
            mc_test_chip_list(6, "FPGA", "FPGA", obj_hub_list_dom, function (str_hub_error) {
                if ("1" === str_hub_error) {
                    fn_callback("1");
                    return;
                }
                // 检测显示芯片列表渲染
                mc_test_chip_list(7, "FPGA", "CNS7153", obj_disp_list_dom, function (str_disp_error) {
                    if ("1" === str_disp_error) {
                        fn_callback("1");
                        return;
                    }
                    // 检测行管芯片列表渲染
                    mc_test_chip_list(8, "FPGA", "138 DECODING", obj_scan_list_dom, function (str_scan_error) {
                        if ("1" === str_scan_error) {
                            fn_callback("1");
                            return;
                        }
                        mc_sdk_get_dicpchip_info_msg("FPGA", "CNS7153", function (str_info_msg) {
                            var obj_disp_info = new mc_sdk_param();

                            obj_disp_info.set_json(str_info_msg);
                            var str_width_step = obj_disp_info.get_attr_val("CNS7153", "IC_CHANNELS");
                            var str_max_scan_cnt = obj_disp_info.get_attr_val("CNS7153", "MAX_SCAN_ROWS");

                            if (
                                !mc_test_control_param(0, obj_width_dom, "MC_LANG_LABLE_WEITH", "64", [str_width_step, "1", g_ui_step_max_val.toString()]) ||
                !mc_test_control_param(0, obj_height_dom, "MC_LANG_LABLE_HEIGHT", "64", ["1", "1", g_ui_step_max_val.toString()]) ||
                !mc_test_control_param(0, obj_grp_cnt_dom, "MC_LANG_LABLE_TXGRP_CNT", "2", ["1", "1", g_ui_step_max_val.toString()]) ||
                !mc_test_control_param(1, obj_grp_mod_dom, "MC_LANG_LABLE_TXGRP_MODE", "MC_LANG_OPTION_STR_3_DSP", [
                    "MC_LANG_OPTION_STR_1_DSP", "MC_LANG_OPTION_STR_3_DSP", "MC_LANG_OPTION_STR_4_DSP"
                ]) ||
                !mc_test_control_param(2, obj_close_low_dom, "MC_LANG_LABLE_CLOSE_LOW_VALID", "0") ||
                !mc_test_control_param(1, obj_slck2_dom, "MC_LANG_LABLE_SCLK_2", "MC_LANG_OPTION_NOT_USE", [
                    "MC_LANG_OPTION_NOT_USE", "LAT", "OE(GCLK)", "A", "B", "C", "D", "E", "F", "UNDEF1", "UNDEF2"
                ]) ||
                !mc_test_control_param(0, obj_scan_num_dom, "MC_LANG_LABLE_SCAN_CNT", "32", ["1", "1", str_max_scan_cnt]) ||
                !mc_test_control_param(0, obj_test_line_dom, "MC_LANG_LABLE_TEST_SCAN", "1", ["1", "1", g_ui_step_max_val.toString()]) ||
                !mc_test_control_param(3, obj_clr_1_dom, "MC_LANG_LABLE_COLOR_1", "MC_LANG_OPTION_CLR_R", [
                    "MC_LANG_OPTION_CLR_R", "MC_LANG_OPTION_CLR_G", "MC_LANG_OPTION_CLR_B", "MC_LANG_OPTION_CLR_V"
                ]) ||
                !mc_test_control_param(3, obj_clr_2_dom, "MC_LANG_LABLE_COLOR_2", "MC_LANG_OPTION_CLR_G", [
                    "MC_LANG_OPTION_CLR_R", "MC_LANG_OPTION_CLR_G", "MC_LANG_OPTION_CLR_B", "MC_LANG_OPTION_CLR_V"
                ]) ||
                !mc_test_control_param(3, obj_clr_3_dom, "MC_LANG_LABLE_COLOR_3", "MC_LANG_OPTION_CLR_B", [
                    "MC_LANG_OPTION_CLR_R", "MC_LANG_OPTION_CLR_G", "MC_LANG_OPTION_CLR_B", "MC_LANG_OPTION_CLR_V"
                ])
                            ) {
                                mc_log_error(0, false);
                                fn_callback("1");
                                return;
                            }
                            ui_shiow_normal();
                        });
                    });
                });
            });
        });

        // 页面显示正常
        function ui_shiow_normal() {
            // 执行正常
            mc_log_error(0, true);
            // 页面操作
            obj_chip_dom
            // 点击主控芯片下拉框
                .children().eq(0).children().children().children().children().eq(0).click()
            // 点击mini芯片
                .next().children("[value='MINI']").click();
            // 切换芯片将试算模组,故需要试算时间
            mc_util_lodading(mod_wziard_update_ctrl, g_obj_ui_jump_time.try_calculate);
        }
    }
    // 修改主控芯片为mini
    function mod_wziard_update_ctrl() {
    // 检测渲染
        var obj_chip_dom = obj_use_window.$("#mc_item_grp_chiplist_type");
        var obj_ctrl_list_dom = obj_chip_dom.children().eq(0);
        var obj_hub_list_dom = obj_chip_dom.children().eq(1);
        var obj_disp_list_dom = obj_chip_dom.next().children(".mc_fold_content").children().children().children().eq(0);
        var obj_scan_list_dom = obj_chip_dom.next().children(".mc_fold_content").children().children().children().eq(1);
        var str_selcet_ctrl = obj_ctrl_list_dom.children().children().children().children("div").children().text();

        // 检测hub芯片列表渲染
        mc_test_chip_list(6, str_selcet_ctrl, "C10", obj_hub_list_dom, function (str_hub_error) {
            if ("1" === str_hub_error) {
                fn_callback("1");
                return;
            }
            mc_test_chip_list(7, str_selcet_ctrl, "CNS7153", obj_disp_list_dom, function (str_disp_error) {
                if ("1" === str_disp_error) {
                    fn_callback("1");
                    return;
                }
                mc_test_chip_list(8, str_selcet_ctrl, "138 DECODING", obj_scan_list_dom, function (str_scan_error) {
                    if ("1" === str_scan_error) {
                        fn_callback("1");
                        return;
                    }
                    ui_shiow_normal();
                });
            });
        });
        function ui_shiow_normal() {
            // 执行正常
            mc_log_error(1, true);
            // 页面操作
            // 点击测试行测试按钮
            // $_scan_box
            var obj_scan_num_dom = obj_chip_dom.nextAll().eq(2);

            // click test_btn
            obj_scan_num_dom.children().children().children().children().eq(1).children(".test_btn").click();
            mc_util_lodading(mod_wziard_test_line_test_btn, g_obj_ui_jump_time.mod_test);
        }
    }
    // 点击测试行测试按钮
    function mod_wziard_test_line_test_btn() {
    // 检测渲染
        var obj_alert_dom = obj_main_window.$(".layui-layer-dialog");

        if (0 < obj_alert_dom.length) {
            obj_alert_dom.children(".layui-layer-btn").children(".layui-layer-btn0").click();
        }
        // 执行正常
        mc_log_error(9, true);
        // 页面操作
        var obj_electrical_param_list = obj_use_window.$(".mc_screen-connect").children(".mc_fold_content").children().children().children();

        // 修改数据组类型为单线串行
        obj_electrical_param_list.eq(5).children(".mc_edt_inp_wrap").children().children().children("ul").children("[lang_id=MC_LANG_OPTION_STR_1_DSP]").click();
        mc_util_lodading(mod_wziard_update_grp_mod, g_obj_load_time.mc_updata_param);
    }
    // 修改分组模式为单线串行
    function mod_wziard_update_grp_mod() {
    // 检测渲染
        var obj_electrical_param_list = obj_use_window.$(".mc_screen-connect").children(".mc_fold_content").children().children().children();
        // 此时模组数据组类型为单线串行 其后应紧跟随着串行类型
        var str_electrical_param_6 = obj_electrical_param_list.eq(6);

        if (!mc_test_control_param(0, str_electrical_param_6, "MC_LANG_LABLE_LED_GRP_MODE", "1", ["1", "1", g_ui_step_max_val.toString()])) {
            mc_log_error(10, false);
            fn_callback("1");
            return;
        }
        // 执行正常
        mc_log_error(10, true);
        // 页面操作
        // 修改第二路时钟为D
        obj_electrical_param_list.eq(-2).children(".mc_edt_inp_wrap").children().children().children("ul").children("[lang_id=D]").click();
        mc_util_lodading(mod_wizard_update_sclk2, g_obj_load_time.mc_updata_param);
    }
    // 修改第二路时钟为D
    function mod_wizard_update_sclk2() {
    // 检测渲染
        var obj_electrical_param_list = obj_use_window.$(".mc_screen-connect").children(".mc_fold_content").children().children().children();
        // 当前最后一个控件
        var obj_electrical_param_end = obj_electrical_param_list.eq(-1);

        if (!mc_test_control_param(1, obj_electrical_param_end, "MC_LANG_LABLE_SCLK_3", "MC_LANG_OPTION_NOT_USE", [
            "MC_LANG_OPTION_NOT_USE", "LAT", "OE(GCLK)", "A", "B", "C", "D", "E", "F", "UNDEF1", "UNDEF2"
        ])) {
            mc_log_error(11, false);
            fn_callback("1");
            return;
        }
        // 执行正常
        mc_log_error(11, true);

        // 页面操作
        obj_use_window.$("#mc_btn_id_apply").click();
        mc_util_lodading(mod_wziard_clk_apply, g_obj_ui_jump_time.mc_alert);
    }
    // 模组向导应用按钮
    function mod_wziard_clk_apply() {
    // 检测渲染
        var obj_alert_dom = obj_main_window.$(".layui-layer-dialog");
        // 执行正常

        // 页面操作
        obj_alert_dom.children(".layui-layer-btn").children(".layui-layer-btn0").click();
        mc_util_lodading(mod_wizard_clk_apply_alert_use, g_obj_ui_jump_time.box_main);
    }
    // 应用弹框确定
    function mod_wizard_clk_apply_alert_use() {
    // 检测渲染
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 0)) {
            mc_log_error(0, false);
            fn_callback("1");
            return;
        }
        // 校验数据
        var ary_box_list = obj_main_window.ARY_BOX_DATA;

        if (1 !== ary_box_list.length) {
            mc_log_error(12, false);
            fn_callback("1");
            return;
        }
        var str_box_md5 = mc_crypto_set_box_md5_to_key(ary_box_list[0]);

        if ("905a3fe16074e9ef940c381307b6c02b" !== str_box_md5) {
            mc_log_error(12, false);
            fn_callback("1");
            return;
        }
        var ary_mod_list = obj_main_window.ARY_MOD_DATA;

        if (1 !== ary_mod_list.length) {
            mc_log_error(13, false);
            fn_callback("1");
            return;
        }
        var str_mod_md5 = mc_cst_mod_md5(ary_mod_list[0]);

        if ("9938b089ffefb48e847eb23fc833592e" !== str_mod_md5) {
            mc_log_error(13, false);
            fn_callback("1");
            return;
        }
        var obj_box_msg_dom = obj_use_window.$("#item_group_box_info");
        var obj_box_msg_list = obj_box_msg_dom.children();

        if (
            "芯片：MINI | CNS7153 | 138译码" !== obj_box_msg_list.eq(0).text() ||
      "接口：C10 | 单线串行" !== obj_box_msg_list.eq(1).text() ||
      "尺寸：64 X 64" !== obj_box_msg_list.eq(2).text()
        ) {
            mc_log_error(14, false);
            fn_callback("1");
            return;
        }

        var obj_normal_param_dom_list = obj_box_msg_dom.next().next().children().children().children().children(".item_box");

        mc_test_normal_param(
            obj_box_msg_list.eq(0).children().eq(1).children().eq(0).attr("lang_id"),
            obj_box_msg_list.eq(0).children().eq(1).children().eq(1).attr("lang_id"),
            obj_normal_param_dom_list, [
                "320", "", "200", "500", "60", "12.5", "12.5", "1000", "100000"
            ], function (ui_error_code) {
                if (0 !== ui_error_code) {
                    mc_log_error(ui_error_code, false);
                    fn_callback("1");
                    return;
                }
                // 执行正常
                mc_log_error(0, true);

                // 页面事件
                obj_use_window.$("div[lang_id='MC_LANG_BOX_CONNECTION']").click();
                mc_util_lodading(mc_boxmain_clk_box_connection, g_obj_ui_jump_time.height_lever_layout);
            });
    }

    // 点击boxmain页面箱体链接按钮
    function mc_boxmain_clk_box_connection() {
    // 检测路径是否正常
        if (!mc_url_is_expect_url(obj_use_iform_tag.src, 1)) {
            mc_log_error(17, false);
            fn_callback("1");
            return;
        }
        // 画布渲染是否正确
        var obj_canvas_dom = obj_use_window.$("#mod_box_next");
        var obj_box_mod_list = obj_canvas_dom.children(".mc_mod");

        if (!mc_test_height_layout_box_mod_ui(obj_box_mod_list.eq(0), {
            mod_pot: "0,0",
            mod_size: "64X64",
            mod_hub_div: "J1",
            mod_list_idx: "1"
        })) {
            mc_log_error(17, false);
            fn_callback("1");
            return;
        }
        // 芯片列表元素
        var obj_chip_dom = obj_use_window.$("#mc_hlever_layout_edit_gp").children(".chip_select").children("div");

        // 检测主控芯片列表渲染
        mc_test_chip_list(5, "", "MINI", obj_chip_dom.children().eq(0), function (str_ctrl_error) {
            if ("1" === str_ctrl_error) {
                fn_callback("1");
                return;
            }
            // 检测hub芯片列表渲染
            mc_test_chip_list(6, "MINI", "C10", obj_chip_dom.children().eq(1), function (str_hub_error) {
                if ("1" === str_hub_error) {
                    fn_callback("1");
                    return;
                }
                chip_list_data_normal();
            }, 1);
        }, 1);

        // 芯片数据校验正常
        function chip_list_data_normal() {
            // 页面操作

            // 操作栏元素
            var obj_action_bar_dom = obj_use_window.$("#mc_hl_ligature");
            // 点击缩小按钮
            // 缩小按钮对象
            var obj_zoom_out_dom = obj_action_bar_dom.children().eq(0).children().eq(0).click();

            if ("2" !== obj_canvas_dom.attr("grid_w")) {
                mc_log_error(18, false);
                fn_callback("1");
                return;
            }
            obj_zoom_out_dom.parent().children(".select_list").children("div[lang_id=\"MC_LANG_ZOOM_IN\"]").click();
            if (
                "3" !== obj_canvas_dom.attr("grid_w") ||
        "MC_LANG_ZOOM_IN" !== obj_zoom_out_dom.attr("lang_id")
            ) {
                mc_log_error(19, false);
                fn_callback("1");
                return;
            }

            obj_action_bar_dom.children().eq(1).children().eq(0).click();
            mc_util_lodading(mc_height_layout_clk_add, g_obj_ui_jump_time.check_mod);
        }
    }

    // 箱体链接页面添加按钮
    function mc_height_layout_clk_add() {
        var obj_main_iframe_window = obj_use_window.$("body").children(".layui-layer-iframe").children(".layui-layer-content").children()[0].contentWindow;

        // 选择第一个模组
        obj_main_iframe_window.$("#mc_contain").children().eq(0).click();
        // 点击应用
        obj_main_iframe_window.$(".mc_btn_group .mc_btn_group_right div[lang_id='MC_LANG_BTN_APPLY']").click();
        var obj_canvas_dom = obj_use_window.$("#mod_box_next");
        var obj_box_mod_list = obj_canvas_dom.children(".mc_mod");

        if (!mc_test_height_layout_box_mod_ui(obj_box_mod_list.eq(0), {
            mod_pot: "0,0",
            mod_size: "64X64",
            mod_hub_div: "?",
            mod_list_idx: "?"
        })) {
            mc_log_error(20, false);
            fn_callback("1");
            return;
        }


        mc_fn_state_normal(fn_callback);
    }
}

/**
 * 测试用例3: 测试模组界面和箱体界面分别应用后的pin引脚的数据显示是否正确
 * @param {Function} fun_callback 回调函数(返回错误内容 , 0代表执行正常)
 */
function mc_case_3(fun_callback) {
    var obj_window_index = -1;
    var obj_window_main = -1;
    var obj_window_iframe_subpage = -1;
    var obj_window_iframe = -1;

    mc_updata_ui(mc_into_index_html);

    // 进入index.html界面
    function mc_into_index_html() {
        try {
            // g_obj_test_iform_dom[0].src = http://localhost:8000/index.html"
            obj_window_index = g_obj_test_iform_dom[0].contentWindow;
            // obj_window_index.$("#iframe_subpage")[0].src = http://localhost:8000/main.html""
            obj_window_main = obj_window_index.$("#iframe_subpage")[0].contentWindow;
            obj_window_iframe_subpage = obj_window_main.$("#iframe_content_subpage")[0];
            obj_window_iframe = obj_window_iframe_subpage.contentWindow;
        } catch (error) {
            mc_log_error(47, false);
            fun_callback("1");
            return;
        }

        // if (1 === ui_test_pin_times) {
        if (!mc_url_is_expect_url(obj_window_iframe_subpage.src, 6)) {
            mc_log_error(43, false);
            fun_callback("1");
            return;
        }
        mc_watch_window_error([obj_window_index, obj_window_main, obj_window_iframe], g_obj_test_iform_dom);
        // 下一步 点击模组向导按钮
        try {
            obj_window_iframe.$("#btn_id_mod_wizard").click();
        } catch (error) {
            mc_log_error(46, false);
            fun_callback("1");
            return;
        }

        mc_util_lodading(mc_into_mod_page, 2000);
    }

    // 进入模组界面
    function mc_into_mod_page() {
        if (!mc_url_is_expect_url(obj_window_iframe_subpage.src, 2)) {
            mc_log_error(1, false);
            fun_callback("1");
            return;
        }

        var obj_chip_html = obj_window_iframe.$("#mc_item_grp_chiplist_type");

        // 点击获取主控T6
        obj_chip_html.children().children().eq(1).children().children().children().children().eq(4).click();

        if (1 === ui_test_pin_times) {
            // 点击切换数据组类型为单串
            obj_chip_html.nextAll().eq(0).children().children().children().children().eq(5).children().children().children().children().children().eq(2).click();
        }
        if (2 === ui_test_pin_times) {
            // 点击切换数据组类型为三线
            obj_chip_html.nextAll().eq(0).children().children().children().children().eq(5).children().children().children().children().children().eq(3).click();
        }
        if (3 === ui_test_pin_times) {
            // 点击切换数据组类型为四线
            obj_chip_html.nextAll().eq(0).children().children().children().children().eq(5).children().children().children().children().children().eq(4).click();
        }
        // 下一步 点应用
        mc_util_lodading(mc_click_apply, 1000);
    }

    // 点击应用
    function mc_click_apply() {
    // 点击应用
        obj_window_iframe.$("#mc_btn_id_apply").click();
        // 下一步  点击提示框
        mc_util_lodading(mc_click_alert_sure, 1000);
    }

    // 点击提示框
    function mc_click_alert_sure() {
    // 定位提示框 点击确定
        obj_window_main.$(".layui-layer-dialog").children().children().eq(1).click();

        // 下一步进入测试当前单串数据 获取数据 可能获取失败
        mc_util_lodading(mc_check_mod_data, 2000);
    }

    // 测试数据
    function mc_check_mod_data() {
    // 验算当前数据
    // var str_mod_single_1 = "(DSP0:STR_0),(DSP1:STR_1)";
        var arr_mod_pin = [
            "(DSP0:STR_0),(DSP1:STR_1)",
            "(DSP0:STR_0),(DSP1:STR_1),(DSP2:STR_2),(DSP3:STR_3),(DSP4:STR_4),(DSP5:STR_5)",
            "(DSP0:STR_0),(DSP1:STR_1),(DSP2:STR_2),(DSP3:STR_3),(DSP4:STR_4),(DSP5:STR_5),(DSP6:STR_6),(DSP7:STR_7)"
        ];
        // 获取界面对象数据

        if (!obj_window_main.g_obj_pin_data_test) {
            mc_log_error(50, false);
            fun_callback("1");
            return;
        }

        // var obj_mod_pin = obj_window_main.g_obj_pin_data_test.mc_util_recvcard_get_xml();
        var str_mod_pin_data = obj_window_main.g_obj_pin_data_test.mc_util_recvcard_get_modlist_pin_pair_exp(0);

        console.log("第" + ui_test_pin_times + "次模组应用数据 : " + str_mod_pin_data);

        obj_window_main.g_obj_pin_data_test = null;
        if (arr_mod_pin[ui_test_pin_times - 1] !== str_mod_pin_data) {
            mc_log_error(41, false);
            fun_callback("1");
            return;
        }
        // 下一步进入箱体连接
        mc_util_lodading(mc_click_box_height, 2000);
    }

    // 点击箱体连接按钮
    function mc_click_box_height() {
    // dom对象转换成window对象
        var obj_window_box_main = obj_window_iframe_subpage.contentWindow.$(".icon_btn_wrap_div");

        // 点击箱体连接按钮
        obj_window_box_main.children().eq(2).click();

        // 下一步 点击箱体连接J值
        mc_util_lodading(mc_click_J, 2000);
    }

    // 点击J值
    function mc_click_J() {
        var obj_window_box_height = obj_window_iframe_subpage.contentWindow;

        // 点亮
        obj_window_box_height.mc_mod_check([obj_window_box_height.$(".mc_mod")]);
        // 添加选中模组队列
        obj_window_box_height.arr_mod_selected.push(obj_window_box_height.$(".mc_mod"));

        //点击右键 修改为J2
        obj_window_box_height.$("#mc_hl_hub").children().children().children().eq(4).click();
        //点击添加
        obj_window_box_height.$("#mc_hl_ligature").children().eq(1).children().click();

        // 下一步点击添加界面的应用
        mc_util_lodading(mc_click_alert_page_add_apply, 1000);
    }

    // 添加模组并赋J值
    function mc_click_alert_page_add_apply() {
    // 应用当前模组
        $(obj_window_iframe.$("#layui-layer-iframe1")).contents().children().children().children().children().eq(1).children().children().eq(3).click();

        // 跳转到箱体连接界面 修改添加的模组为J5
        // obj_window_iframe_subpage.contentWindow.$("#mc_hl_hub").children().children().children().eq(4).click();
        obj_window_iframe.$("#mc_hl_hub").children().children().children().eq(4).click();
        obj_window_iframe.$("#mc_hl_hub").children().children().children().eq(4).click();
        obj_window_iframe.$("#mc_hl_hub").children().children().children().eq(4).click();

        //点击应用按钮
        mc_util_lodading(mc_click_box_height_add_apply, 1000);
    }

    // 点击box_height应用按钮
    function mc_click_box_height_add_apply() {
    // 点击应用按钮
    // obj_window_iframe_subpage.contentWindow.$(".icon-btn-apply").click();
        obj_window_iframe.$(".icon-btn-apply").click();

        // 点击提示框的确定
        obj_window_main.$(".layer-anim").children().eq(3).children().click();

        // 下一步 比较箱体应用的数据 可能获取箱剃数据失败
        mc_util_lodading(mc_jungle_box_pin, 2000);
    }

    // 比较箱体应用后的引脚数据
    function mc_jungle_box_pin() {
    // obj_window_iframe;
    // obj_window_main;
    // obj_window_iframe_subpage;
        var b_correct = false;
        var arr_box_pin = [
            "(DSP2:STR_0),(DSP3:STR_1),(DSP8:STR_0),(DSP9:STR_1)",
            "(DSP6:STR_0),(DSP7:STR_1),(DSP8:STR_2),(DSP9:STR_3),(DSP10:STR_4),(DSP11:STR_5),(DSP24:STR_0),(DSP25:STR_1),(DSP26:STR_2),(DSP27:STR_3),(DSP28:STR_4),(DSP29:STR_5)",
            "(DSP8:STR_0),(DSP9:STR_1),(DSP10:STR_2),(DSP11:STR_3),(DSP12:STR_4),(DSP13:STR_5),(DSP14:STR_6),(DSP15:STR_7),(DSP32:STR_0),(DSP33:STR_1),(DSP34:STR_2),(DSP35:STR_3),(DSP36:STR_4),(DSP37:STR_5),(DSP38:STR_6),(DSP39:STR_7)"
        ];

        if (!obj_window_main.g_obj_pin_data_test) {
            mc_log_error(49, false);
            fun_callback("1");
            return;
        }
        var ui_cnt = obj_window_main.g_obj_pin_data_test.mc_util_recvcard_get_modlist_cnt();
        var str_jungle = "";


        for (var id = 0; id < ui_cnt; id++) {
            str_jungle += obj_window_main.g_obj_pin_data_test.mc_util_recvcard_get_modlist_pin_pair_exp(id);
            str_jungle += ",";
        }
        str_jungle = str_jungle.slice(0, -1);
        if (str_jungle === arr_box_pin[ui_test_pin_times - 1]) {
            b_correct = true;
        }
        console.log("第" + ui_test_pin_times + "次箱体应用数据 : " + str_jungle);

        if (b_correct) {
            ui_test_pin_times++;
            fun_callback("test_3_next");
        } else {
            mc_log_error(45, false);
            fun_callback("1");
            obj_window_main.g_obj_pin_data_test = null;
        }
        return;
    }
}

/**
 * 测试用例4: 测试boxmain界面发送完箱体后loading遮罩是否未清除
 * @param {Function} fun_callback 回调函数(返回错误内容 , 0代表执行正常)
 */

function mc_case_4(fun_callback) {
    var obj_window_index = -1;
    var obj_window_main = -1;
    var obj_window_iframe_subpage = -1;
    var obj_window_iframe = -1;

    mc_updata_ui(mc_into_index_html);

    function mc_into_index_html() {
        try {
            // g_obj_test_iform_dom[0].src = http://localhost:8000/index.html"
            obj_window_index = g_obj_test_iform_dom[0].contentWindow;
            // obj_window_index.$("#iframe_subpage")[0].src = http://localhost:8000/main.html""
            obj_window_main = obj_window_index.$("#iframe_subpage")[0].contentWindow;
            obj_window_iframe_subpage = obj_window_main.$("#iframe_content_subpage")[0];
            obj_window_iframe = obj_window_iframe_subpage.contentWindow;
        } catch (error) {
            mc_log_error(47, false);
            fun_callback("1");
            return;
        }

        // if (1 === ui_test_pin_times) {
        if (!mc_url_is_expect_url(obj_window_iframe_subpage.src, 6)) {
            mc_log_error(43, false);
            fun_callback("1");
            return;
        }
        mc_watch_window_error([obj_window_index, obj_window_main, obj_window_iframe], g_obj_test_iform_dom);

        mc_util_lodading(mc_click_mod_enter, 1000);
    }

    function mc_click_mod_enter() {
    // 下一步 点击模组向导按钮
        try {
            obj_window_iframe.$("#btn_id_mod_wizard").click();
        } catch (error) {
            mc_log_error(46, false);
            fun_callback("1");
            return;
        }

        // 进入模组界面 点击应用
        mc_util_lodading(mc_into_mod_page_test_four, 2000);
    }

    function mc_into_mod_page_test_four() {
        if (!mc_url_is_expect_url(obj_window_iframe_subpage.src, 2)) {
            mc_log_error(1, false);
            fun_callback("1");
            return;
        }

        // 点击应用按钮
        obj_window_iframe.$("#mc_btn_id_apply").click();
        // 下一步  点击提示框
        mc_util_lodading(mc_click_alert, 1000);
    }

    function mc_click_alert() {
    // 定位提示框 点击确定
        obj_window_main.$(".layui-layer-dialog").children().children().eq(1).click();

        // 点击boxmain界面发送按钮
        mc_util_lodading(mc_clcik_box_main_send, 3000);
    }

    function mc_clcik_box_main_send() {
    // 点击发送按钮
        obj_window_iframe_subpage.contentWindow.$(".icon-hardware-write").click();

        // 进入硬件选择界面 点击发送按钮
        mc_util_lodading(mc_clcik_hw_send, 2000);
    }

    function mc_clcik_hw_send() {
    // 点击发送
        obj_window_main.$("#layui-layer-iframe2")[0].contentWindow.$(".icon-hardware-write").click();

        // 检测是否去掉遮罩层
        mc_util_lodading(mc_test_loading, 4000);
    }

    function mc_test_loading() {
    // test loading
        if (0 !== obj_window_main.$(".mc_loading_box").length) {
            mc_log_error(48, false);
            fun_callback("1");
            return;
        }

        //点击确定按钮
        obj_window_main.$(".layui-layer-dialog").children().find(".layui-layer-btn0").click();

        // 点击固化按钮
        mc_util_lodading(mc_click_box_main_load, 1000);
    }

    function mc_click_box_main_load() {
    // 点击固化按钮
        obj_window_iframe_subpage.contentWindow.$(".icon-hardware-save").click();

        //点击固化按钮
        mc_util_lodading(mc_click_hw_load, 1000);
    }

    function mc_click_hw_load() {
    // 点击固化按钮
        obj_window_main.$("#layui-layer-iframe4")[0].contentWindow.$(".icon-hardware-save").click();

        //测试固化遮罩
        mc_util_lodading(mc_test_save_loading, 4000);
    }

    function mc_test_save_loading() {
        if (0 !== obj_window_main.$(".mc_loading_box").length) {
            mc_log_error(48, false);
            fun_callback("1");
            return;
        }

        fun_callback("0");
        return;
    }
}

/* ********************************* TOOL ************************************************************************************************ */


/************************************************************************************************
* 类型:
*    函数
* 功能:
*    刷新页面
* 参数:
*    @param {Promise<Function>} fn_callback 执行回调
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.6
*      内容 : 所有代码
************************************************************************************************/
function mc_updata_ui(fn_callback) {
    g_obj_test_iform_dom[0].src = "../index.html";
    window.localStorage.clear();
    mc_util_lodading(fn_callback, g_obj_ui_jump_time.index);
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    测试完成
* 参数:
*    @param {Promise<Function>} fn_callback 执行回调
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.6
*      内容 : 所有代码
************************************************************************************************/
function mc_fn_state_normal(fn_callback) {
    mc_close_ui();
    fn_callback("0");
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    关闭页面
* 参数:
*     NA
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.6
*      内容 : 所有代码
************************************************************************************************/
function mc_close_ui() {
    g_obj_test_iform_dom[0].src = "";
    window.localStorage.clear();
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    等待页面加载完成
* 参数:
*     @param {Promise<Function>} fn_callback 执行回调
*     @param {Promise<Number>} ui_time_value 延迟时间
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.6
*      内容 : 所有代码
************************************************************************************************/
function mc_util_lodading(fn_callback, ui_time_value) {
    setTimeout(fn_callback, ui_time_value);
}


/************************************************************************************************
* 类型:
*    函数
* 功能:
*    判断路径是否为指定路径
* 参数:
*     @param {Promise<String>} str_url 判断路径
*     @param {Promise<Number>} ui_url_type 指定路径类型
* 返回：
*    @returns {Promise<Boolean>} 排序后的value属性
* 备注:
*   @ps 0 : box_main.html
*   @ps 1 : height_lever_layout.html
*   @ps 2 : mod_wizard.html
*   @ps 3 : reg_cfg.html
*   @ps 4 : load_date.html
*   @ps 5 : check_mod.html
*   @ps 6 : box_index.html
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.9.15
*      内容 : 所有代码
************************************************************************************************/
function mc_url_is_expect_url(str_url, ui_url_type) {
    var obj_url_list = {
        0: "/pages/box_main/box_main.html",
        1: "/pages/box_design/height_lever_layout.html",
        2: "/pages/mod_wizard/mod_wizard.html",
        3: "/pages/reg_cfg/reg_cfg.html",
        4: "/pages/hw_bt/load_date.html",
        5: "/pages/check_mod/check_mod.html",
        6: "/pages/box_index/box_index.html"
    };

    return -1 !== str_url.indexOf(g_str_serve_port + obj_url_list[ui_url_type]);
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    为window对象添加onerror方法
*    检测函数执行过程中的报错,报错则停止用例
* 参数:
*     @param {Promise<Array>} ary_window_list 需要添加的window对象
* 返回：
*    NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.6
*      内容 : 所有代码
************************************************************************************************/
function mc_watch_window_error(ary_window_list) {
    mc_util_lodading(function () {
        for (var idx_window = 0; idx_window < ary_window_list.length; idx_window++) {
            ary_window_list[idx_window].onerror = function (str_error_msg) {
                if (-1 === str_error_msg.indexOf("http://localhost:8000/pages/box_main")) {
                    mc_close_ui(true);
                }
                return false;
            };
        }
    }, g_obj_load_time.mount_onerror);
}

/************************************************************************************************
 * 类型:
 *    函数
 * 功能:
 *    打印日志,输出到控制台
 * 参数:
 *    @param { Promise<String> } ui_error_type 日志 message
 *    @param { Promise<Boolean> } b_is_success 成功 || 失败 === false
 *    @param { Promise<string> } str_test_num 当前进入的测试用例标识
 * 返回:
 *    @returns { Promise<Object> } conso.log对象
 * 例子:
 *    NA
 * 备注:
 *   0: "模组向导页面正常",
 *   1: "主控芯片切换显示正常",
 *   2: "测试功能正常",
 *   3: "数据校验成功",
 *   4: "box_index页面渲染正常",
 *   5: "主控芯片列表正常",
 *   6: "hub芯片列表正常",
 *   7: "显示芯片列表正常",
 *   8: "行管芯片列表正常",
 *   9: "模组测试功能",
 *   10: "串行类型显示",
 *   11: "数据时钟显示",
 *   12: "箱体数据",
 *   13: "模组数据",
 *   14: "模组页面,箱体参数",
 *   15: "模组页面,常规参数",
 *   16: "sdk返回正常",
 *   17: "箱体链接页面正常",
 *   18: "缩小功能正常",
 *   19: "放大功能正常",
 *   20: "添加功能正常",
 *   21: "删除功能正常",
 *   22: "复制功能正常",
 *   23: "引脚修改正常",
 *   24: "反向功能正常",
 *   25: "手动连线功能正常",
 *   26: "手动连线连接卡设置功能正常",
 *   27: "左对齐功能正常",
 *   28: "右对齐功能正常",
 *   29: "上对齐功能正常",
 *   30: "下对齐功能正常",
 *   31: "垂直层叠功能正常",
 *   32: "水平层叠功能正常",
 *   33: "锁定功能正常",
 *   34: "粘合功能正常",
 *   35: "合并功能正常",
 *   36: "编辑引脚功能正常",
 *   37: "变换功能正常",
 *   38: "发送功能正常",
 *   39: "快速应用功能正常",
 *   40: "快速连线功能正常"
 * 修改:
 *    1. 类型 : 创建
 *       作者 : 徐烁超
 *       时间 : 2020-11-6
 *       内容 : 所有代码
************************************************************************************************/
function mc_log_error(ui_error_type, b_is_success, str_test_num) {
    if ("number" !== typeof ui_error_type || "boolean" !== typeof b_is_success) {
        return false;
    }
    var obj_error_lang = {
        0: "模组向导页面正常",
        1: "主控芯片切换显示正常",
        2: "测试功能正常",
        3: "数据校验成功",
        4: "box_index页面渲染正常",
        5: "主控芯片列表正常",
        6: "hub芯片列表正常",
        7: "显示芯片列表正常",
        8: "行管芯片列表正常",
        9: "模组测试功能",
        10: "串行类型显示",
        11: "数据时钟显示",
        12: "箱体数据",
        13: "模组数据",
        14: "模组页面,箱体参数",
        15: "模组页面,常规参数",
        16: "sdk返回正常",
        17: "箱体链接页面正常",
        18: "缩小功能正常",
        19: "放大功能正常",
        20: "添加功能正常",
        21: "删除功能正常",
        22: "复制功能正常",
        23: "引脚修改正常",
        24: "反向功能正常",
        25: "手动连线功能正常",
        26: "手动连线连接卡设置功能正常",
        27: "左对齐功能正常",
        28: "右对齐功能正常",
        29: "上对齐功能正常",
        30: "下对齐功能正常",
        31: "垂直层叠功能正常",
        32: "水平层叠功能正常",
        33: "锁定功能正常",
        34: "粘合功能正常",
        35: "合并功能正常",
        36: "编辑引脚功能正常",
        37: "变换功能正常",
        38: "发送功能正常",
        39: "快速应用功能正常",
        40: "快速连线功能正常",
        41: "模组生成pin脚数据不符合实际",
        42: "获取模组界面数据引脚异常",
        43: "进入主界面异常",
        44: "测试完成",
        45: "箱体界面获取数据异常",
        46: "子界面未加载完成,无法获取界面元素",
        47: "界面层级生成异常,无法获取所有层级界面",
        48: "loading未清除",
        49: "箱体界面数据获取异常,无法比较",
        50: "模组界面数据获取异常,无法比较"
    };

    var str_error = "";

    if ("test_3" === str_test_num) {
        str_error = "第" + (ui_test_pin_times - 1) + "次 [正常]";

        if (!b_is_success) {
            str_error = "第" + (ui_test_pin_times - 1) + "次 [错误]";
        }
        str_error += obj_error_lang[ui_error_type];
    } else {
        str_error = "第" + g_ui_error_carry_cnt + "次 [正常]";

        if (!b_is_success) {
            str_error = "第" + g_ui_error_carry_cnt + "次 [错误]";
        }
        str_error += obj_error_lang[ui_error_type];
    }

    if (g_obj_log_list[g_str_test_case_name]) {
        g_obj_log_list[g_str_test_case_name] += str_error + "<br>";
    } else {
        g_obj_log_list[g_str_test_case_name] = str_error + "<br>";
    }

    return console.log(str_error);
}

/* ********************************* check_data  ************************************************************************************************ */

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    比较常规参数渲染
* 参数:
*    @param {Promise<String>} str_ctrl_name 当前主控芯片名称
*    @param {Promise<String>} str_disp_name 当前选择芯片名称
*    @param {Promise<Object>} obj_ui_dom 常规参数列表(jq元素)
*    @param {Promise<Array>} ary_use_ui_param_list 使用页面值的参数对比内容列表
*    @param {Promise<Function>} fn_callback 执行回调
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.16
*      内容 : 所有代码
************************************************************************************************/
function mc_test_normal_param(str_ctrl_name, str_disp_name, obj_ui_dom, ary_use_ui_param_list, fn_callback) {
    var ary_use_ui_param_name_list = [
    //最小放电时间
        "CLOSE_TIME",
        // OE最小时间
        "MIN_OE_TIME",
        // 换行时间偏移量
        "SCAN_CHANGE_OFFSET_TIME",
        // 最小换行时间
        "SCAN_CHANGE_TIME",
        // 帧刷新率
        "FRME_REFRESH_FREQ",
        // 数据时钟的基准时钟频率
        "DATA_LEVEL_FREQ",
        // 灰度时钟频率
        "GRAY_LEVEL_FREQ",
        // 帧头等待时间
        "FRME_HEAD_WAIT",
        // 帧尾等待时间
        "FRME_TAIL_WAIT"
    ];

    mc_sdk_get_dicpchip_info_msg(str_ctrl_name, str_disp_name, function (str_info_msg) {
        mc_get_tpl_param(str_ctrl_name, str_disp_name, str_info_msg, function (str_tpl_json) {
            var obj_tpl_param = new mc_sdk_param();

            if (!obj_tpl_param.set_json(str_tpl_json)) {
                fn_callback(16);
                return;
            }
            mc_sdk_get_dispchip_access(str_disp_name, "", function (str_disp_json) {
                var obj_disp_param = new mc_sdk_param();

                if (!obj_disp_param.set_json(str_disp_json)) {
                    fn_callback(16);
                    return;
                }
                str_disp_json = obj_disp_param.get_param_value(str_disp_name);
                if (!obj_disp_param.set_json(str_disp_json)) {
                    fn_callback(16);
                    return;
                }
                mc_trans_param_by_tpl(obj_tpl_param, obj_disp_param);

                var ui_param_cnt = obj_tpl_param.get_param_cnt();

                for (var idx_param = 0; idx_param < ui_param_cnt; idx_param++) {
                    var str_param_name = obj_tpl_param.get_param_name(idx_param);
                    var str_param_value = obj_tpl_param.get_param_value(str_param_name);
                    var str_tail_value = obj_tpl_param.get_attr_val(str_param_name, "TAIL_ID_LIST");
                    var str_param_type = obj_tpl_param.get_attr_val(str_param_name, "UI_TYPE");
                    var ui_use_ui_param_idx = ary_use_ui_param_name_list.indexOf(str_param_name);

                    if (-1 !== ui_use_ui_param_idx) {
                        str_param_value = ary_use_ui_param_list[ui_use_ui_param_idx];
                    }
                    if ("STEP_EDIT" === str_param_type) {
                        var str_step_value = obj_tpl_param.get_attr_val(str_param_name, "STEP");
                        var str_max_value = obj_tpl_param.get_attr_val(str_param_name, "MAX_VAL");
                        var str_min_value = obj_tpl_param.get_attr_val(str_param_name, "MIN_VAL");


                        if (!mc_test_control_param(0, obj_ui_dom.eq(idx_param), str_param_name, str_param_value, [str_step_value, str_min_value, str_max_value], str_tail_value)) {
                            fn_callback(16);
                            return;
                        }
                    } else {
                        var str_array_val = obj_tpl_param.get_attr_val(str_param_name, "ARRAY");
                        var ary_array_val = str_array_val.split(",");

                        ary_array_val = ary_array_val.map(ele => ele.split("=")[1].trim());

                        if (!mc_test_control_param(1, obj_ui_dom.eq(idx_param), str_param_name, str_param_value, ary_array_val, str_tail_value)) {
                            fn_callback(16);
                            return;
                        }
                    }
                }
                fn_callback(0);
            });
        });
    });
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    获取常规参数配置信息表
* 参数:
*    @param {Promise<String>} str_ctrl_name 当前主控芯片名称
*    @param {Promise<String>} str_disp_name 当前选择芯片名称
*    @param {Promise<String>} str_info_msg 显示芯片注册信息
*    @param {Promise<Function>} fun_callback 执行回调
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.16
*      内容 : 所有代码
************************************************************************************************/
function mc_get_tpl_param(str_ctrl_name, str_disp_name, str_info_msg, fun_callback) {
    var obj_info_json = new mc_sdk_param();

    obj_info_json.set_param_clear();
    obj_info_json.set_json(str_info_msg);
    var str_pmw_val = obj_info_json.get_attr_val(str_disp_name, "PWM_IC");
    var str_tpl_url = "";
    var str_assign_tpl_url = "";

    switch (str_pmw_val) {
    case "1":
        str_assign_tpl_url = "/pages/box_main/" + str_ctrl_name.toUpperCase() + "/common_param_pwm.json";
        str_tpl_url = "/pages/box_main/common_param_pwm.json";
        break;
    default:
        str_assign_tpl_url = "/pages/box_main/" + str_ctrl_name.toUpperCase() + "/common_param_general.json";
        str_tpl_url = "/pages/box_main/common_param_general.json";
        break;
    }

    $.ajax(str_assign_tpl_url, {
        type: "get",
        async: false,
        success: function () {
            $.get(str_assign_tpl_url, function (str_ctr_tpl_json, status) {
                if ("success" !== status) {
                    fun_callback();
                    return;
                }
                fun_callback(str_ctr_tpl_json);
                return;
            }, "text");
        },
        error: function () {
            $.get(str_tpl_url, function (str_tpl_json, status) {
                if ("success" !== status) {
                    fun_callback();
                    return;
                }
                fun_callback(str_tpl_json);
                return;
            }, "text");
        }
    });
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    将sdk内容存入配置信息中
* 参数:
*    @param {Promise<Object>} obj_tpl_param 配置信息
*    @param {Promise<Object>} obj_disp_param sdk常规参数内容
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.16
*      内容 : 所有代码
************************************************************************************************/
function mc_trans_param_by_tpl(obj_tpl_param, obj_disp_param) {
    // 配置长度
    var ui_param_cnt = obj_tpl_param.get_param_cnt();

    for (var idx_param = 0; idx_param < ui_param_cnt; idx_param++) {
    // 配置参数名
        var str_param_name = obj_tpl_param.get_param_name(idx_param);
        // sdk返回参数值
        var str_param_value = obj_disp_param.get_param_value(str_param_name);

        // 存入配置
        obj_tpl_param.set_param_value(str_param_name, str_param_value);

        // ns结尾单位需要将sdk返回内容计算存入
        var str_tail_value = obj_tpl_param.get_attr_val(str_param_name, "TAIL_ID_LIST");
        // attr属性值
        var str_attr_val = "";

        if (-1 !== str_tail_value.indexOf("ns")) {
            var str_base_time = obj_disp_param.get_param_value("BASE_TIME");

            str_attr_val = "ns(" + (Number(str_param_value) * Number(str_base_time)) + ")";
            if ("number" !== typeof Number(str_base_time)) {
                str_attr_val = "ns(null)";
            }
            obj_tpl_param.set_attr_val(str_param_name, "TAIL_ID_LIST", str_attr_val);
        }
        mc_normal_dispose_param(obj_tpl_param, obj_disp_param, str_param_name, str_param_value);
        // 获取array属性修改内容为(x=x)
        var str_array_val = obj_tpl_param.get_attr_val(str_param_name, "ARRAY");

        // 获取失败则代表不需要处理
        if (!str_array_val) {
            continue;
        }
        var ary_array_val = str_array_val.split(",");

        for (var idx_attr = 0; idx_attr < ary_array_val.length; idx_attr++) {
            if (-1 !== ary_array_val[idx_attr].indexOf("=")) {
                break;
            }
            str_attr_val += ary_array_val[idx_attr] + "=" + ary_array_val[idx_attr] + ",";
        }
        str_attr_val = str_attr_val.slice(0, -1);
        obj_tpl_param.set_attr_val(str_param_name, "ARRAY", str_attr_val);
    }

    // SCAN_REFRESH_FREQ属性值及下拉框选项需要特别获取
    var str_row_freq = obj_disp_param.get_param_value("ROW_FREQ");
    var str_scan_ref_list = obj_disp_param.get_param_value("SCAN_REFRESH_LIST");

    obj_tpl_param.set_param_value("SCAN_REFRESH_FREQ", str_row_freq);
    str_scan_ref_list = mc_normal_dispose_array_val(str_scan_ref_list);
    if ("string" !== typeof str_scan_ref_list || 0 >= str_scan_ref_list.length) {
        str_scan_ref_list = str_row_freq + "=" + str_row_freq;
    }
    obj_tpl_param.set_attr_val("SCAN_REFRESH_FREQ", "ARRAY", str_scan_ref_list);

    // 相位偏移的最大及最小值
    var ui_level_freq = Number(obj_tpl_param.get_param_value("DATA_LEVEL_FREQ"));
    var ui_base_time = Number(obj_disp_param.get_param_value("BASE_TIME"));
    var ui_offset_m = Math.ceil((1000 / ui_level_freq) / ui_base_time);

    obj_tpl_param.set_attr_val("DATA_LEVEL_OFFSET", "MIN_VAL", (-ui_offset_m).toString());
    obj_tpl_param.set_attr_val("DATA_LEVEL_OFFSET", "MAX_VAL", (ui_offset_m).toString());
}
/* 处理参数 */
function mc_normal_dispose_param(obj_tpl_json, obj_item_json, str_param_name, str_parms_value) {
    var str_param_val = "";
    var str_attr_val = "";
    var idx_attr = 0;

    if ("SCAN_REFRESH_FREQ" === str_param_name) {
        str_param_val = obj_item_json.get_param_value("ROW_FREQ");
        obj_tpl_json.set_param_value(str_param_name, str_param_val);
        str_attr_val = obj_item_json.get_param_value("SCAN_REFRESH_LIST");

        str_attr_val = mc_normal_dispose_array_val(str_attr_val);
        if ("string" !== typeof str_attr_val || 0 >= str_attr_val.length) {
            str_attr_val = str_param_val + "=" + str_param_val;
        }
        obj_tpl_json.set_attr_val(str_param_name, "ARRAY", str_attr_val);
    } else if ("FREQ_UPS" === str_param_name) {
        str_attr_val = obj_item_json.get_param_value("ENABLED_FREQ_UPS_ARY");
        var ary_array_val = str_attr_val.split(",");

        if (0 >= ary_array_val.length) {
            ary_array_val = [str_parms_value];
        }
        str_attr_val = "";
        for (idx_attr = 0; idx_attr < ary_array_val.length; idx_attr++) {
            str_attr_val += ary_array_val[idx_attr] + "=" + ary_array_val[idx_attr] + ",";
        }
        obj_tpl_json.set_attr_val(str_param_name, "ARRAY", str_attr_val.substring(0, str_attr_val.length - 1));
    } else if ("GRAY_LEVEL_RATIO" === str_param_name) {
        str_parms_value = Number(str_parms_value) * 100 + "";
        if ("NAN" === str_parms_value.toUpperCase()) {
            str_parms_value = "0";
        }
        obj_tpl_json.set_param_value(str_param_name, str_parms_value);
    } else if ("DATA_LEVEL_RATIO" === str_param_name) {
        str_parms_value = Number(str_parms_value) * 100 + "";
        if ("NAN" === str_parms_value.toUpperCase()) {
            str_parms_value = "0";
        }
        obj_tpl_json.set_param_value(str_param_name, str_parms_value);
    } else if ("DISP_MODE" === str_param_name) {
        str_attr_val = obj_item_json.get_param_value("ENABLED_DISP_MODE_ARY");
        var ary_arry_value = str_attr_val.split(",");

        if (0 >= ary_arry_value.length) {
            ary_arry_value = [str_parms_value];
        }
        str_attr_val = "";
        for (idx_attr = 0; idx_attr < ary_arry_value.length; idx_attr++) {
            switch (parseInt(ary_arry_value[idx_attr], 10)) {
            case 0:
                str_attr_val += "0=" + "DISP_MODE_DEFAULT,";
                break;
            case 1:
                str_attr_val += "1=" + "DISP_MODE_FRESH_PRI,";
                break;
            case 2:
                str_attr_val += "2=" + "DISP_MODE_GRAY_PRI,";
                break;
            case 3:
                str_attr_val += "3=" + "DISP_MODE_BRIGHTNESS_PRI,";
                break;
            case 4:
                str_attr_val += "4=" + "DISP_MODE_HIGHFRESH_PRI,";
                break;
            case 6:
                str_attr_val += "6=" + "DISP_MODE_BALANCE,";
                break;
            default:
                break;
            }
        }
        obj_tpl_json.set_attr_val(str_param_name, "ARRAY", str_attr_val.substring(0, str_attr_val.length - 1));
    }
}
/* 处理下拉框选项内容 */
function mc_normal_dispose_array_val(str_array_val) {
    if ("string" !== typeof str_array_val || 0 >= str_array_val.length) {
        return "";
    }
    var ary_array_val = str_array_val.split(",");
    var idx_array = 0;
    var str_array_val_dispose = "";
    var str_dispose_val = "";

    if (ary_array_val[0].split("=")[0] === ary_array_val[0]) {
        for (idx_array = 0; idx_array < ary_array_val.length; idx_array++) {
            str_dispose_val = ary_array_val[idx_array] + "=" + ary_array_val[idx_array] + ",";
            str_array_val_dispose += str_dispose_val;
        }
        return str_array_val_dispose.substring(0, str_array_val_dispose.length - 1);
    }
    return str_array_val;
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    对比芯片列表
* 参数:
*    @param {Promise<Number>} ui_chip_type 对比芯片类型
*    @param {Promise<String>} str_ctrl_name 当前主控芯片名称
*    @param {Promise<String>} str_select_value 当前选择芯片名称
*    @param {Promise<Object>} obj_chip_list_dom 芯片列表dom对象列表(jq元素)
*    @param {Promise<Function>} fn_callback 执行回调
*    @param {Promise<Number>} ui_lang_type 执行回调
* 返回：
*     NA
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.9
*      内容 : 所有代码
************************************************************************************************/
function mc_test_chip_list(ui_chip_type, str_ctrl_name, str_select_value, obj_chip_list_dom, fn_callback, ui_lang_type) {
    var obj_test_fn = {
        5: "mc_sdk_get_ctrlchip_list",
        6: "mc_sdk_get_hubchip_list",
        7: "mc_sdk_get_dispchip_list",
        8: "mc_sdk_get_scanchip_list"
    };
    var obj_test_control_title = {
        5: "MC_LANG_CTRLCHIP_LIST",
        6: "MC_LANG_LABLE_HUB",
        7: "MC_LANG_DISPCHIP_LIST",
        8: "MC_LANG_SCANCHIP_LIST"
    };

    if (ui_lang_type) {
        obj_test_control_title = {
            5: "MC_LANG_CTRLCHIP",
            6: "MC_LANG_LABLE_HUB",
            7: "MC_LANG_DISPCHIP",
            8: "MC_LANG_SCANCHIP"
        };
    }
    var fn_test = eval("(false || " + obj_test_fn[ui_chip_type] + ")");

    if (5 === ui_chip_type) {
        fn_test(test_chip_list);
    } else {
        fn_test(str_ctrl_name, test_chip_list);
    }

    function test_chip_list(str_chip_list) {
        var obj_sdk_param = new mc_sdk_param();

        // 解析芯片列表
        obj_sdk_param.set_json(str_chip_list);

        var ary_chip_list = [];
        var ui_param_cnt = obj_sdk_param.get_param_cnt();

        for (var idx_param = 0; idx_param < ui_param_cnt; idx_param++) {
            var str_param_name = obj_sdk_param.get_param_name(idx_param);
            var str_param_value = obj_sdk_param.get_param_value(str_param_name);

            if (
                "ERROR_CODE" === str_param_name
            ) {
                continue;
            }
            if (6 === ui_chip_type) {
                if (!str_param_value) {
                    ary_chip_list.push(str_ctrl_name);
                } else {
                    ary_chip_list = str_param_value.split(",");
                }
                break;
            }
            ary_chip_list.push(str_param_value);
        }
        if (0 === ary_chip_list.length) {
            ary_chip_list.push(str_ctrl_name);
        }
        if (mc_test_control_param(1, obj_chip_list_dom, obj_test_control_title[ui_chip_type], str_select_value, ary_chip_list)) {
            mc_log_error(ui_chip_type, true);
            fn_callback("0");
        } else {
            mc_log_error(ui_chip_type, false);
            fn_callback("1");
        }
    }
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    根据控件类型,对比控件参数
* 参数:
*    @param {Promise<Number>} ui_control_type 对比控件类型
*    @param {Promise<$>} obj_control_dom 对比控件的$元素
*    @param {Promise<String>} str_control_title 控件描述
*    @param {Promise<String>} str_control_val 控件内容
*    @param {Promise<Array>} ary_control_attr 控件参数(不同的控件存放内容不同)
*    @param {Promise<String>} str_control_content_tail 控件尾部内容(可选)
* 返回：
*    @returns {Promise<Boolean>} 对比结果
* 备注:
*    0:步进框 : 控件参数 = [str:步进值,str:最小值,str:最大值]
*    1:下拉框 : 控件参数 = ary下拉框选项列表
*    2:复选框 : 无
*    3:单选按钮组 :  控件参数 = ary选项列表
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.10
*      内容 : 所有代码
************************************************************************************************/
function mc_test_control_param(ui_control_type, obj_control_dom, str_control_title, str_control_val, ary_control_attr, str_control_content_tail) {
    var ary_test_control_list = [
        "mc_test_contorl_step_edit",
        "mc_test_contorl_option",
        "mc_test_contorl_toggle",
        "mc_test_contorl_radio"
    ];

    try {
        return window[ary_test_control_list[ui_control_type]](obj_control_dom, str_control_title, str_control_val, ary_control_attr, str_control_content_tail);
    } catch (error) {
        return false;
    }
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    比较步进框
* 参数:
*    @param {Promise<$>} obj_control_dom 对比控件的$元素
*    @param {Promise<String>} str_control_title 当前主控芯片名称
*    @param {Promise<String>} str_control_val 当前主控芯片名称
*    @param {Promise<Array>} ary_control_attr 控件参数(步进值,最小值,最大值)
*    @param {Promise<String>} str_control_content_tail 控件尾部内容(可选)
* 返回：
*    @returns {Promise<Boolean>} 对比结果
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.10
*      内容 : 所有代码
************************************************************************************************/
function mc_test_contorl_step_edit(obj_control_dom, str_control_title, str_control_val, ary_control_attr, str_control_content_tail) {
    // title
    var str_title_dom = obj_control_dom.children().eq(0).attr("lang_id");

    if (str_title_dom !== str_control_title) {
        return false;
    }
    var obj_input_dom = obj_control_dom.children().eq(1).children().children().children().eq(1).children();
    // value
    var str_value_dom = obj_input_dom.attr("value");

    if (str_value_dom !== str_control_val) {
        return false;
    }
    // attrs
    var str_step_dom = obj_input_dom.attr("cui_step");
    var str_min_dom = obj_input_dom.attr("cui_min_val");
    var str_max_dom = obj_input_dom.attr("cui_max_val");

    if (
        str_step_dom !== ary_control_attr[0] ||
    str_min_dom !== ary_control_attr[1] ||
    str_max_dom !== ary_control_attr[2]
    ) {
        return false;
    }
    // Content of the tail
    var obj_constorl_content_tail = obj_control_dom.children().eq(-1);

    if (
        str_control_content_tail && str_control_content_tail !== obj_constorl_content_tail.attr("lang_id")
    ) {
        return false;
    }
    return true;
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    比较下拉框
* 参数:
*    @param {Promise<$>} obj_control_dom 对比控件的$元素
*    @param {Promise<String>} str_control_title 当前主控芯片名称
*    @param {Promise<String>} str_control_val 当前主控芯片名称
*    @param {Promise<Array>} ary_control_attr 控件参数(下拉框列表)
*    @param {Promise<String>} str_control_content_tail 控件尾部内容(可选)
* 返回：
*    @returns {Promise<Boolean>} 对比结果
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.10
*      内容 : 所有代码
************************************************************************************************/
function mc_test_contorl_option(obj_control_dom, str_control_title, str_control_val, ary_control_attr, str_control_content_tail) {
    // title
    var str_title_dom = obj_control_dom.children().eq(0).attr("lang_id");

    if (str_title_dom !== str_control_title) {
        return false;
    }
    // value
    var str_value_dom = obj_control_dom.find(".mc_opt_select").children("div").children().attr("lang_id");

    if (str_value_dom !== str_control_val) {
        return false;
    }
    // attrs
    var b_is_normal = true;

    obj_control_dom.children().eq(1).children().children().children("ul").children().each((idx, dom) => {
        if ($(dom).attr("lang_id") !== ary_control_attr[idx]) {
            b_is_normal = false;
        }
    });
    // Content of the tail
    var obj_constorl_content_tail = obj_control_dom.children().eq(-1);

    if (
        (!str_control_content_tail && obj_constorl_content_tail.attr("lang_id")) ||
    (str_control_content_tail && str_control_content_tail !== obj_constorl_content_tail.attr("lang_id"))
    ) {
        return false;
    }
    return b_is_normal;
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    比较复选框
* 参数:
*    @param {Promise<$>} obj_control_dom 对比控件的$元素
*    @param {Promise<String>} str_control_title 当前主控芯片名称
*    @param {Promise<String>} str_control_val 当前主控芯片名称
* 返回：
*    @returns {Promise<Boolean>} 对比结果
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.10
*      内容 : 所有代码
************************************************************************************************/
function mc_test_contorl_toggle(obj_control_dom, str_control_title, str_control_val) {
    // title
    var str_title_dom = obj_control_dom.children().eq(0).attr("lang_id");

    if (str_title_dom !== str_control_title) {
        return false;
    }
    // value
    var str_value_dom = obj_control_dom.children().eq(1).children().children().attr("checkbox_select");

    if (
        !("1" === str_control_val && "true" === str_value_dom) &&
    !("0" === str_control_val && "false" === str_value_dom)
    ) {
        return false;
    }
    return true;
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    比较按钮组件
* 参数:
*    @param {Promise<$>} obj_control_dom 对比控件的$元素
*    @param {Promise<String>} str_control_title 当前主控芯片名称
*    @param {Promise<String>} str_control_val 当前主控芯片名称
*    @param {Promise<Array>} ary_control_attr 控件参数(选择列表)
* 返回：
*    @returns {Promise<Boolean>} 对比结果
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.10
*      内容 : 所有代码
************************************************************************************************/
function mc_test_contorl_radio(obj_control_dom, str_control_title, str_control_val, ary_control_attr) {
    // title
    var str_title_dom = obj_control_dom.children().eq(0).attr("lang_id");

    if (str_title_dom !== str_control_title) {
        return false;
    }
    // value
    var obj_radio_dom = obj_control_dom.children().eq(1).children().children();
    var str_value_idx = obj_radio_dom.attr("select_index");
    var str_value_dom = obj_radio_dom.children().eq((Number(str_value_idx) - 1)).attr("lang_id");

    if (str_value_dom !== str_control_val) {
        return false;
    }
    // attrs
    var b_is_normol = true;

    obj_radio_dom.children().each(function (idx, dom) {
        if ($(dom).attr("lang_id") !== ary_control_attr[idx]) {
            b_is_normol = false;
        }
    });


    return b_is_normol;
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    根据模组数据构造模组md5值进行指定数据比较
* 参数:
*    @param {Promise<Object>} obj_ui_mod_data 模组数据对象
* 返回：
*    @returns {Promise<String>} 模组数据形成md5值
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.16
*      内容 : 所有代码
************************************************************************************************/
function mc_cst_mod_md5(obj_ui_mod_data) {
    var str_mod_name = obj_ui_mod_data.name;
    var obj_mod_data = obj_ui_mod_data.data;
    var str_value = str_mod_name +
    obj_mod_data.mc_util_mod_get_led_name() +
    obj_mod_data.mc_util_mod_get_pitch() +
    obj_mod_data.mc_util_mod_get_width() +
    obj_mod_data.mc_util_mod_get_height() +
    obj_mod_data.mc_util_mod_get_disp_chip() +
    obj_mod_data.mc_util_mod_get_scan_chip() +
    obj_mod_data.mc_util_mod_get_scan_pix_step() +
    obj_mod_data.mc_util_mod_get_max_frequence() +
    obj_mod_data.mc_util_mod_get_oe_low_valid() +
    obj_mod_data.mc_util_mod_get_close_low_valid() +
    obj_mod_data.mc_util_mod_get_tx_low_valid() +
    obj_mod_data.mc_util_mod_get_str_grp_mode() +
    obj_mod_data.mc_util_mod_get_scan_cnt_loc() +
    obj_mod_data.mc_util_mod_get_led_type() +
    obj_mod_data.mc_util_mod_get_clr_msg() +
    obj_mod_data.mc_util_mod_get_jump_ic() +
    obj_mod_data.mc_util_mod_get_ic_channels();

    var ui_sclk_cnt = Number(obj_mod_data.mc_util_mod_get_sclk_pin_cnt());

    for (var idx_sclk = 0; idx_sclk < ui_sclk_cnt; idx_sclk++) {
        str_value += obj_mod_data.mc_util_mod_get_sclk_pin_name(idx_sclk);
    }

    var ary_point_data = obj_mod_data.mc_util_mod_get_str_ary();

    for (var idx_str = 0; idx_str < ary_point_data.length; idx_str++) {
        var obj_str_data = ary_point_data[idx_str];

        str_value += obj_str_data.str_str_name;
        str_value += obj_str_data.str_pin_name;
        var ary_scan_data = obj_str_data.vst_scan_ary;

        for (var idx_scan = 0; idx_scan < ary_scan_data.length; idx_scan++) {
            var obj_scan_data = ary_scan_data[idx_scan];
            var ary_pix_data = obj_scan_data.vst_pix_ary;

            for (var idx_pix = 0; idx_pix < ary_pix_data.length; idx_pix++) {
                var obj_pix_data = ary_pix_data[idx_pix];

                str_value += obj_pix_data.u32_img_x;
                str_value += obj_pix_data.u32_img_y;
                str_value += obj_pix_data.c_color;
            }
        }
    }
    return md5(str_value);
}

/************************************************************************************************
* 类型:
*    函数
* 功能:
*    判断箱体链接页面盒子是否正常
* 参数:
*    @param {Promise<$>} obj_box_mod 盒子模型对象
*    @param {Promise<Object>} obj_st_box_content 盒子内容
*    @param {Promise<Number>} ui_ui_type 当前页面(0:箱体链接页面,1:大屏连接页面)
* 返回：
*    @returns {Promise<Boolean>} 模组数据形成md5值
* 备注:
*    obj_st_box_content {mod_pot,mod_size,mod_hub_div,mod_list_idx,chip_name,card_idx}
* 修改:
*   1. 类型 : 创建
*      作者 : 徐烁超
*      时间 : 2020.11.16
*      内容 : 所有代码
************************************************************************************************/
function mc_test_height_layout_box_mod_ui(obj_box_mod, obj_st_box_content, ui_ui_type) {
    var str_mod_pot = obj_box_mod.children(".mod_pot").text();
    var str_mod_size = obj_box_mod.children(".mod_size").text();
    var str_mod_hub_div = obj_box_mod.children(".mod_hub_div").text();
    var str_mod_list_idx = obj_box_mod.children(".mod_list_idx").text();
    var str_chip_name = obj_box_mod.children(".chip_name").text();
    var str_card_idx = obj_box_mod.children(".card_idx").text();

    if (
        str_mod_pot !== obj_st_box_content.mod_pot ||
    str_mod_size !== obj_st_box_content.mod_size ||
    str_mod_hub_div !== obj_st_box_content.mod_hub_div ||
    str_mod_list_idx !== obj_st_box_content.mod_list_idx
    ) {
        return false;
    }
    if (
        ui_ui_type &&
    (
        str_chip_name !== obj_st_box_content.chip_name ||
      str_card_idx !== obj_st_box_content.card_idx
    )
    ) {
        return false;
    }

    return true;
}

function test_case_get_lower(obj_get_list) {
    var obj_lower_list = {
        // mc_case_1: {
        //     test_case: [
        //         {
        //             "name": "mc_case_3",
        //             "entry": "mc_case_3",
        //             "get_lower_list": "test_case_get_lower",
        //             "descript": "测试模组与箱体的引脚"
        //         },
        //         {
        //             "name": "mc_case_3",
        //             "entry": "mc_case_3",
        //             "get_lower_list": "test_case_get_lower",
        //             "descript": "测试模组与箱体的引脚"
        //         }
        //     ]
        // }
    };

    return obj_lower_list[obj_get_list.name];
}

